﻿import '/js/html2pdf.bundle.min.js';

//预览html导出pdf
//contentId: 需要转换为pdf的html内容的根元素Id
//previewId: 用于预览pdf的html元素Id，适用于windows
//callback: 回调razor页面函数，适用于安卓
export function exportHtml2PdfForPreview(contentId, previewId, callback) {

    var contentElement = document.getElementById(contentId);
    var previewElement = document.getElementById(previewId);

    //参考https://github.com/eKoopmans/html2pdf.js#options
    var opt = {
        //预留页边距输出页眉、页脚
        margin: 20,
        filename: 'report.pdf',
        //如果打印的内容不清楚，可以使用scale：2来调节，但会增加文件大小
        //html2canvas: { scale: 2 },
        //A4纵向
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
        //avoid-all避免对一行文字截断分页
        pagebreak: { mode: ['avoid-all', 'css'] },
    };

    //从内容html生成Pdf
    html2pdf().set(opt).from(contentElement).toPdf().get('pdf').then(function (pdf) {

        //设置pdf页眉、页脚
        var totalPages = pdf.internal.getNumberOfPages();
        for (let i = 1; i <= totalPages; i++) {
            pdf.setPage(i);
            pdf.setFontSize(12);
            pdf.setTextColor(50);
            //jsPDF输出中文乱码，需要N多操作支持中文
            //pdf.text('天气预报一览表', (pdf.internal.pageSize.getWidth() / 2 - 10), 8);//页眉
            pdf.text(i + ' / ' + totalPages, (pdf.internal.pageSize.getWidth() - 30), (pdf.internal.pageSize.getHeight() - 8));//页脚
        }
    })
        //.output('bloburi').then(function (bloburi) {
        //    //生成bloburi
        //    //console.log(bloburi);
        //    //blob:https://0.0.0.0/2307aa5b-c7b3-4727-a40d-2b81f8298148
        //    previewElement.src = bloburi;
        //    //在手机上调试运行无法显示预览pdf
        //});
        .output('datauristring').then(function (dataUrl) {
            //生成dataUrl
            //console.log(dataUrl);
            //data:application/pdf;filename=generated.pdf;base64,JVB...
            if (previewElement) {
                //设置html元素预览，适用于windows
                previewElement.src = dataUrl;
                //在手机上调试运行报错System.UriFormatException Invalid URI: The Uri string is too long
            }

            if (callback) {
                var base64 = dataUrl.split(',')[1];
                //回调razor页面函数，获取pdf字符串，适用于安卓
                callback.invokeMethodAsync('GetPdfBase64String', base64);
            }
        });

    //支持output('datauristring'), output('blob'), output('bloburi'), output('arraybuffer'), save()
}

//从html生成pdf文件数组
//contentId: 需要转换为pdf的html内容的根元素Id
export function convertHtml2PdfAry(contentId) {

    var contentElement = document.getElementById(contentId);

    //参考https://github.com/eKoopmans/html2pdf.js#options
    var opt = {
        //预留页边距输出页眉、页脚
        margin: 20,
        filename: 'report.pdf',
        //如果打印的内容不清楚，可以使用scale：2来调节，但会增加文件大小
        //html2canvas: { scale: 2 },
        //A4纵向
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
        //avoid-all避免对一行文字截断分页
        pagebreak: { mode: ['avoid-all', 'css'] },
    };

    //从内容html生成Pdf
    let ary = html2pdf().set(opt).from(contentElement).toPdf().get('pdf').then(function (pdf) {

        //设置pdf页眉、页脚
        var totalPages = pdf.internal.getNumberOfPages();
        for (let i = 1; i <= totalPages; i++) {
            pdf.setPage(i);
            pdf.setFontSize(12);
            pdf.setTextColor(50);
            //jsPDF输出中文乱码，需要N多操作支持中文
            //pdf.text('天气预报一览表', (pdf.internal.pageSize.getWidth() / 2 - 10), 8);//页眉
            pdf.text(i + ' / ' + totalPages, (pdf.internal.pageSize.getWidth() - 30), (pdf.internal.pageSize.getHeight() - 8));//页脚
        }
    })
        .output('arraybuffer');

    //支持output('datauristring'), output('blob'), output('bloburi'), output('arraybuffer'), save()

    return ary;
}